home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / tool / fapxtool / src / txl / txldir2.c < prev    next >
C/C++ Source or Header  |  1994-07-09  |  4KB  |  194 lines

  1. /***************
  2. *
  3. * g:\exe\txl\src\txldir2.c
  4. */
  5. #include "txl.h"
  6.  
  7. int getkeyid(char *str)
  8. {
  9.     int i = 0;
  10.     int key = 0;
  11.     while (*(str + i) && *(str + i) != '.') {
  12.         if (*(str + i + 1) && *(str + i + 1) != '.') {
  13.             key += *(int *)(str + i);
  14.             i += 2;
  15.         }
  16.         else {
  17.             key += *(str + i);
  18.             i++;
  19.         }
  20.     }
  21.     if (key == 0) {
  22.         key = 1;
  23.     }
  24.     else if ((key & 0x7fff) == 0x7fff) {
  25.         key = 0x7ffe;
  26.     }
  27.     else {
  28.         key &= 0x7fff;    /* 正数化 */
  29.     }
  30.     return (key);
  31. }
  32.  
  33. void readmyforum(char *fpath)
  34. {
  35. /*
  36. %%%%  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       F&
  37.    1  FMTOWNS フォーラム 1 (基本編)                 FTOWNS1
  38. */
  39.     int i, old;
  40.     int key, match;
  41.     char *token;
  42.     FILE *fp;
  43.     char *buf = logstr_mlist;    /* 80バイト---使い回し(^^;) */
  44.  
  45.     if ((fp = fopen(fpath, "rt")) == NULL) {
  46.         return;    /* myforum.logは存在しない */
  47.     }
  48.     while (!feof(fp)) {
  49.         fgets(buf, 80, fp);
  50.         if ((token = strchr(buf, '\n')) != NULL) {
  51.             *token = NUL;
  52.         }
  53.         if (!matchstr("%%%%  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ F&",
  54.                 buf)) {
  55.             continue;    /* ゴミは捨てる */
  56.         }
  57.         strncpy(log_fname, buf + 52, 8);
  58.         *(log_fname + 8) = NUL;
  59.         key = getkeyid(log_fname);
  60.         match = 0;
  61.         old   = 0;
  62.         for (i = 0; key <= finfo[i].key; i = finfo[i].next) {
  63.             old = i;
  64.             if (finfo[i].key == key) {
  65.                 if (far_strcmp(finfo[i].fname, log_fname) == 0) {
  66.                     match = 1;
  67.                     break;
  68.                 }
  69.             }
  70.             if (finfo[i].next == 0) {
  71.                 break;
  72.             }
  73.         }
  74.         if (!match) {
  75.             maxfinfodata++;
  76.             finfo[maxfinfodata].next = finfo[old].next;
  77.             finfo[old].next = maxfinfodata;
  78.             finfo[maxfinfodata].key = key;
  79.             far_strcpy(finfo[maxfinfodata].fname, log_fname);
  80.             *(buf + 46) = NUL;
  81.             del_tailspace(buf, 45);
  82.             far_strcpy(finfo[maxfinfodata].title, buf + 6);
  83.         }
  84.     }
  85.     fclose(fp);
  86.     return;
  87. }
  88.  
  89. void readtitle(char *fpath, long *para)
  90. {
  91.     int i, old;
  92.     int key, match;
  93.     FILE *fp;
  94.     char *buf = logstr_mlist;    /* 80バイト---使い回し(^^;) */
  95.     char *token;
  96.  
  97.     if ((fp = fopen(fpath, "rt")) == NULL) {
  98.         return;    /* fapxtxf.set は存在しない */
  99.     }
  100.     while (!feof(fp)) {
  101.         fgets(buf, 80, fp);
  102.         if ((*buf >= '\"') && (*buf <= '%')) {        /* "#$% */
  103.             continue;
  104.         }
  105.         if ((token = strchr(buf, '\n')) != NULL) {
  106.             *token = NUL;
  107.         }
  108.         if (matchstr("'&myforum=", buf)) {
  109.             strcpy(line2, buf + 9);        /* bakfile へコピーする(^^;) */
  110.         }
  111.         else if (matchstr("'&exclude=", buf)) {
  112.             strcpy((char *)(&(para[maxexclude])), buf + 9);
  113.             maxexclude++;
  114.         }
  115.         else if (matchstr("'&recursive=", buf)) {
  116.             for (i = 0; finfo[i].next > 0; i = finfo[i].next);
  117.             maxfinfodata++;
  118.             finfo[maxfinfodata].next = 0;
  119.             finfo[i].next = maxfinfodata;
  120.             finfo[maxfinfodata].key = -1;
  121.             far_strcpy(finfo[maxfinfodata].fname, buf + 11);
  122.         }
  123.         else if (*buf == '!') {
  124.             if ((token = strchr(buf + 1, '=')) != NULL) {
  125.                 *token = NUL;
  126.                 token++;
  127.                 if (strlen(buf + 1) > 14) {
  128.                     *(buf + 14 + 1) = NUL;
  129.                 }
  130.                 key = getkeyid(buf + 1);
  131.  
  132.                 match = 0;
  133.                 old   = 0;
  134.                 for (i = 0; key <= finfo[i].key; i = finfo[i].next) {
  135.                     old = i;
  136.                     if (finfo[i].key == key) {
  137.                         if (far_strcmp(finfo[i].fname, buf + 1) == 0) {
  138.                             match = 1;
  139.                             break;
  140.                         }
  141.                     }
  142.                     if (finfo[i].next == 0) {
  143.                         break;
  144.                     }
  145.                 }
  146.                 if (!match) {
  147.                     maxfinfodata++;
  148.                     finfo[maxfinfodata].next = finfo[old].next;
  149.                     finfo[old].next = maxfinfodata;
  150.                     finfo[maxfinfodata].key = key;
  151.                     far_strcpy(finfo[maxfinfodata].fname, buf + 1);
  152.                     if (strlen(token) > 40) {
  153.                         *(token + 40) = NUL;
  154.                     }
  155.                     far_strcpy(finfo[maxfinfodata].title, token);
  156.                 }
  157.             }
  158.         }
  159.     }
  160.     fclose(fp);
  161.     return;
  162. }
  163.  
  164. int dspmyforum(char *fname, FILE *fp)
  165. {
  166.     int i;
  167.     int key;
  168.     char *buf, *tmp;
  169.  
  170.     strncpy(log_fname, fname, 14);
  171.     *(log_fname + 14) = NUL;
  172.     buf = logstr_mlist;    /* 80バイト---使い回し(^^;) */
  173.     key = getkeyid(log_fname);
  174.     for (i = 0; key <= finfo[i].key; i = finfo[i].next) {
  175.         if (finfo[i].key == key) {
  176.             if (far_strchr(finfo[i].fname, '.') == NULL) {
  177.                 if ((tmp = jstrchr(log_fname, '.')) != NULL) {
  178.                     *tmp = NUL;
  179.                 }
  180.             }
  181.             if (far_strcmp(finfo[i].fname, log_fname) == 0) {
  182.                 far_strcpy(buf, finfo[i].title);
  183.                 fputs(buf, fp);
  184.                 fputc('\n', fp);
  185.                 return (0);
  186.             }
  187.         }
  188.         if (finfo[i].next == 0) {
  189.             break;
  190.         }
  191.     }
  192.     return (1);
  193. }
  194.